package com.njwb.day10;

import java.util.*;

public class ArrayListAllMethodsDemo {
    public static void main(String[] args) {

        // 1. 创建 ArrayList 对象
        ArrayList<String> list = new ArrayList<>();

        // 2. 添加元素
        list.add("张三");                      // 添加到末尾
        list.add("李四");
        list.add("王五");
        list.add(1, "赵六");                  // 在索引1插入“赵六”

        // 3. 批量添加元素
        List<String> others = Arrays.asList("钱七", "孙八");
        list.addAll(others);                  // 添加集合所有元素到末尾
        list.addAll(2, Arrays.asList("周九")); // 从索引2开始插入一个集合

        // 4. 获取元素
        System.out.println(list);
        System.out.println("索引2的元素是：" + list.get(2));

        // 5. 修改元素
        list.set(2, "周十");  // 替换索引2的元素为“周十”

        // 6. 查询信息
        System.out.println("列表大小：" + list.size());           // 获取元素个数
        System.out.println("是否为空：" + list.isEmpty());       // 是否为空
        System.out.println("是否包含'李四'：" + list.contains("李四")); // 是否包含元素
        System.out.println("李四的索引：" + list.indexOf("李四"));    // 第一次出现索引
        System.out.println("李四的最后索引：" + list.lastIndexOf("李四")); // 最后一次出现索引

        // 7. 删除元素
        list.remove("王五");         // 删除第一次出现的“王五”
        list.remove(0);             // 删除索引为0的元素
        list.removeAll(Arrays.asList("钱七", "孙八")); // 批量删除
        list.retainAll(Arrays.asList("赵六", "李四")); // 只保留指定集合的交集
        // 清空所有元素
        list.clear();

        // 8. 再次添加元素用于后续操作
        list.addAll(Arrays.asList("A", "B", "C", "D", "E"));

        // 9. 遍历方式
        System.out.println("=== 普通 for ===");
        for (int i = 0; i < list.size(); i++) {
            System.out.println("索引" + i + "：" + list.get(i));
        }


        System.out.println("=== 增强 for ===");
        for (String item : list) {
            System.out.println(item);
        }

        System.out.println("=== 迭代器 ===");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

        System.out.println("=== Lambda 表达式 ===");
        list.forEach(System.out::println);

        // 10. 工具方法
        Object[] objArr = list.toArray();                   // 转为 Object[]
        String[] strArr = list.toArray(new String[0]);
        System.out.println(Arrays.toString(objArr));// 转为 String[]
        System.out.println("数组内容：" + Arrays.toString(strArr));

        Collections.sort(list);      // 排序（按字典序）
        System.out.println("排序后：" + list);

        Collections.reverse(list);   // 反转
        System.out.println("反转后：" + list);

        Collections.shuffle(list);   // 打乱顺序
        System.out.println("打乱后：" + list);
        Collections.shuffle(list);   // 打乱顺序
        System.out.println("打乱后：" + list);
        Collections.shuffle(list);   // 打乱顺序
        System.out.println("打乱后：" + list);

    }
}
